package utils;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;
import java.util.UUID;
/**
 * 加密解密类
 */
public class SecurityUtil {
    /**
     * 对密码进⾏加密
     *
     * @return
     */
    public static String encrypt(String password) {
        // 每次⽣成内容不同的，但⻓度固定 32 位的盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 最终密码=md5(盐值+原始密码)
        String finalPassword =
                DigestUtils.md5DigestAsHex((salt + password).getBytes());
        return salt + finalPassword;
    }

    /**
     * 密码验证
     *
     * @param password      待验证密码
     * @param finalPassword 最终正确的密码（数据库中加盐的密码）
     * @return
     */
    public static boolean verify(String password, String finalPassword) {
        //⾮空校验
        if (!StringUtils.hasLength(password) ||
                !StringUtils.hasLength(finalPassword)) {
            return false;
        }
        //最终密码不是64位, 则不正确
        if (finalPassword.length() != 64) {
            return false;
        }
        //盐值
        String salt = finalPassword.substring(0, 32);
        // 使⽤盐值+待确认的密码⽣成⼀个最终密码
        String securityPassword =
                DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 使⽤盐值+最终的密码和数据库的真实密码进⾏对⽐
        return (salt + securityPassword).equals(finalPassword);
    }
}
